// async function asyncFunction() {
//   console.log(5); // 同步
//   const res = await asyncFunctionPromise(); // 异步
//   console.log(res); // 异步 宏任务
// }
// asyncFunction().then((res) => console.log(8)); // 所有的await 执行完毕 才会执行
// function asyncFunctionPromise() {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       resolve(7);
//     }, 200);
//   });
// }
// setTimeout(() => {
//   console.log(1); // 异步 宏任务
// }, 0);
// new Promise((resolve, reject) => {
//   console.log(2); // 同步
//   setImmediate(() => {
//     // 宏任务
//     resolve(3);
//   });
// }).then((res) => {
//   console.log(res); // 异步 的微任务
// });
// console.log(4); // 同步

// js事件循环  找同步  / 异步
// 微任务 先执行 : Promise.then  Promise.catch  Promise.finally  async/await MutationObserver Vue.$nextTick process.nextTick
// 宏任务 最后执行 : setTimeout  setInterval  setImmediate  requestAnimationFrame  I/O  ajax  UI渲染
// 5 2 4 3 1 7  3组
// 2 5 4 3 1 7  4组
// 5 2 4 3 1 7  5组
// 5 2 4 1 3 7  6组
// 5 2 4 3 1 7  1组
// 5 2 4 3 1 7  2组

async function fn() {
  //  1 6 5 2 3 4
  console.log(1);
  await fn2(); // await 下面的代码 需要等到 await得到结果后才会执行
  console.log(2);
  return 3; // async 函数的返回值是一个Promise实例 return的结果 是 .then的参数
}
setTimeout(() => {
  console.log(4);
}, 0);

fn().then((res) => {
  console.log(res);
});

Promise.resolve().then(() => {
  console.log(7);
});

console.log(5);
function fn2() {
  return new Promise((resolve, reject) => {
    console.log(6); // 同步
    resolve();
    // setTimeout(() => {
    //   console.log(6);
    //   resolve();
    // }, 0);
  });
}
// 韩 : 1 5 4 6 2 3
// 梁 : 1 5 2 3 4 6
// 杨 : 1 5 4 6 2 3

//
// 1 6 2 5 3 4
